import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 单位转换测试类
 * 验证 kg、g 转换为吨的计算是否正确
 */
public class UnitConversionTest {
    
    public static void main(String[] args) {
        System.out.println("=== 单位转换测试 ===");
        
        // 测试 kg 转吨
        testKgToTon();
        
        // 测试 g 转吨
        testGToTon();
        
        // 测试边界情况
        testEdgeCases();
    }
    
    /**
     * 测试 kg 转吨
     */
    private static void testKgToTon() {
        System.out.println("\n--- kg 转吨测试 ---");
        
        // 1000kg = 1吨
        BigDecimal kg1000 = new BigDecimal("1000");
        BigDecimal result1 = convertKgToTon(kg1000);
        System.out.println("1000kg = " + result1 + "吨 (期望: 1.000000)");
        
        // 500kg = 0.5吨
        BigDecimal kg500 = new BigDecimal("500");
        BigDecimal result2 = convertKgToTon(kg500);
        System.out.println("500kg = " + result2 + "吨 (期望: 0.500000)");
        
        // 1kg = 0.001吨
        BigDecimal kg1 = new BigDecimal("1");
        BigDecimal result3 = convertKgToTon(kg1);
        System.out.println("1kg = " + result3 + "吨 (期望: 0.001000)");
        
        // 0.5kg = 0.0005吨
        BigDecimal kg05 = new BigDecimal("0.5");
        BigDecimal result4 = convertKgToTon(kg05);
        System.out.println("0.5kg = " + result4 + "吨 (期望: 0.000500)");
    }
    
    /**
     * 测试 g 转吨
     */
    private static void testGToTon() {
        System.out.println("\n--- g 转吨测试 ---");
        
        // 1000000g = 1吨
        BigDecimal g1000000 = new BigDecimal("1000000");
        BigDecimal result1 = convertGToTon(g1000000);
        System.out.println("1000000g = " + result1 + "吨 (期望: 1.000000)");
        
        // 500000g = 0.5吨
        BigDecimal g500000 = new BigDecimal("500000");
        BigDecimal result2 = convertGToTon(g500000);
        System.out.println("500000g = " + result2 + "吨 (期望: 0.500000)");
        
        // 1000g = 0.001吨
        BigDecimal g1000 = new BigDecimal("1000");
        BigDecimal result3 = convertGToTon(g1000);
        System.out.println("1000g = " + result3 + "吨 (期望: 0.001000)");
        
        // 1g = 0.000001吨
        BigDecimal g1 = new BigDecimal("1");
        BigDecimal result4 = convertGToTon(g1);
        System.out.println("1g = " + result4 + "吨 (期望: 0.000001)");
    }
    
    /**
     * 测试边界情况
     */
    private static void testEdgeCases() {
        System.out.println("\n--- 边界情况测试 ---");
        
        // 0kg = 0吨
        BigDecimal kg0 = new BigDecimal("0");
        BigDecimal result1 = convertKgToTon(kg0);
        System.out.println("0kg = " + result1 + "吨 (期望: 0.000000)");
        
        // 0g = 0吨
        BigDecimal g0 = new BigDecimal("0");
        BigDecimal result2 = convertGToTon(g0);
        System.out.println("0g = " + result2 + "吨 (期望: 0.000000)");
        
        // 很大的数值
        BigDecimal kgLarge = new BigDecimal("999999");
        BigDecimal result3 = convertKgToTon(kgLarge);
        System.out.println("999999kg = " + result3 + "吨 (期望: 999.999000)");
    }
    
    /**
     * kg 转吨
     */
    private static BigDecimal convertKgToTon(BigDecimal kg) {
        return kg.divide(new BigDecimal("1000"), 6, RoundingMode.HALF_UP);
    }
    
    /**
     * g 转吨
     */
    private static BigDecimal convertGToTon(BigDecimal g) {
        return g.divide(new BigDecimal("1000000"), 6, RoundingMode.HALF_UP);
    }
}
